package cn.itcast.crm.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.crm.dao.CustomerDao;
import cn.itcast.crm.domain.Customer;

@Transactional
@Service("customerService")
public class CustomerServiceImpl implements CustomerService {
	
	@Autowired
	private CustomerDao customerDao;
	
	
	//调用Dao查询
	public List<Customer> findAll() {
		return customerDao.findAll();
	}


	//查询未关联到定区的客户数据
	public List<Customer> findNotAssociation() {
		return customerDao.findByFixedAreaIdIsNull();
	}


	//查询关联到某个定区的客户数据
	public List<Customer> findHasAssociationByFixedAreaId(String fixedAreaId) {
		return customerDao.findByFixedAreaId(fixedAreaId);
	}


	/**
	  * @Description: 实现客户关联定区
	  * @param fixedAreaId:定区ID,将来将客户记录中逻辑外键定区ID 改为此值
	  * @param customerIds :将要关联到定区客户ID
	*/
	public void assignCutomer2FixedArea(String fixedAreaId, Integer[] customerIds) {
		//方式一：1、根据定区ID查询旧关联的客户id  2、跟提交客户id判断哪些是新增（将客户外键改为定区ID值），删除（将客户外键改为null）
		//方式二：1、将之前定区关联客户解除关系 2、将客户遍历分别关联定区
		customerDao.setFixedArea2Null(fixedAreaId);
		if(customerIds!=null&&customerIds.length>0){
			for (Integer customerId : customerIds) {
				customerDao.setFixedarea2Cutomer(fixedAreaId,customerId);
			}
			
		}
	}


	/**验证手机号是否存在
	  * @Description: false:验证不通过   true:验证通过
	  * @return 
	  * 短路与 &&" 操作如果第一个条件不满足 那么后面的条件就不用再判断了
	  * "短路或 ||"  如果第一个条件为true 则后面的条件则不再判断
	*/
	public Boolean validateTel(String tel) {
		List<Customer> list = customerDao.findByTelephone(tel);
		if(list!=null && list.size()>0){
			return false;
		}
		return true;
	}


	/**
	 * 客户注册
	 */
	public void regist(Customer customer) {
		customerDao.save(customer);
		
	}

	
	
	
	/**
	 * 根据用户手机号查询用户状态(type)
	 */
	public Customer findByTelephone(String tel) {
		List<Customer> list = customerDao.findByTelephone(tel);
		if(list!=null && list.size()>0){
			return list.get(0);
		}
		return null;
	}


	/**
	 * 激活邮件(根据id)
	 */
	public void activeMail(Integer customerId) {
		customerDao.activeMail(customerId);
		
	}


	/**
	 * 客户登录
	 */
	public Customer login(String tel, String pwd) {
		return customerDao.findByTelephoneAndPassword(tel,pwd);
	}


	/**
	 * 根据地址查询定区ID
	 */
	public String findFixedAreaIdByAddress(String address) {
		return customerDao.findFixedAreaIdByAddress(address);
	}
}
